# encoding: utf-8
class StudentsController < ApplicationController
  require 'yaml'
  # GET /students
  # GET /students.json
  def index
    @f_n=""
    if !params[:type].nil? && params[:type]=="s"
      #第一组过滤条件
      if !params[:u].nil?
        @us = Student.order("studentId ASC").select("id").find_all_by_university(params[:u])
        @f_n << "  大学:"<< params[:u].to_s
      end
      if !params[:y].nil?
        @ys = Student.order("studentId ASC").select("id").find_all_by_college(params[:y])
        @f_n << "  学院:" << params[:y].to_s
      end
      if !params[:g].nil?
        @gs = Student.order("studentId ASC").select("id").find_all_by_sgroup(params[:g])
        @f_n << "  分组:" << params[:g].to_s
      end
      #第二组过滤条件
      get_f_n(params, @f_n)
      q = get_filter_query_str(params)
      if !q.empty?
        q= q.sub(" AND", "")
        @os = Student.order("studentId ASC").select("id").where(q, params)
      end
      #合并结果
      ss =[]<< @us<< @ys<<@gs<< @os
      ss.delete(nil)
      if ss.size ==0
        @f_n=nil
        @students = Student.limit(30).order("studentId ASC")
      else
        rs = get_ids(ss[0])
        ss.each do |sss|
          rs = rs & get_ids(sss)
        end
        @students =Student.order("studentId ASC").find(rs)
      end
    else
      @f_n=nil
      @students = Student.limit(30).order("studentId ASC")
    end
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @students }
    end
  end

  def get_students4ajax
    @students =Student.offset(params[:offset].to_i*30).limit(30).order("studentId ASC")
    render :layout => false
  end

  def get_f_n params, f_n
    ##学号
    if !params[:i].nil? && !params[:i].empty?
      f_n<<"  学号包含:"<< params[:i]
    end
    ##姓名
    if !params[:x].nil? && !params[:x].empty?
      f_n<<"  姓名包含:"<< params[:x]
    end
    ##年级
    if !params[:n].nil? && !params[:n].empty?
      f_n<<"  年级包含:"<< params[:n]
    end
    ##专业
    if !params[:z].nil? && !params[:z].empty?
      f_n<<"  专业包含:"<< params[:z]
    end
    ##毕业开始时间
    if !params[:s].nil? && !params[:s].empty?
      begin
        params[:s].to_date
        f_n<<"  毕业开始时间:"<< params[:s]
      rescue
      end
    end
    ##毕业结束时间
    if !params[:e].nil? && !params[:e].empty?
      begin
        params[:e].to_date + 1.month
        f_n<<"  毕业结束时间:"<< params[:e]
      rescue
      end
    end
    ##生源地
    if !params[:d].nil? && !params[:d].empty?
      f_n<<"  生源地包含:"<<params[:d]
    end
    ##性别
    if !params[:b].nil? && !params[:b].empty?

      f_n<<"  性别:"<< {0=>"男", 1=>"女"}[params[:b].to_i]
    end
    ##手机
    if !params[:p].nil? && !params[:p].empty?
      f_n<<"  电话号码包含:"<<params[:p]
    end
    f_n
  end

  def get_ids collections
    options = collections.map do |element|
      [element.send("id")]
    end
    options
  end

  def get_filter_query_str params
    q=""
    ##学号
    if !params[:i].nil? && !params[:i].empty?
      q<<" AND studentId like :i"
      params[:i] = ("%"<<params[:i]<<"%")
    end
    ##姓名
    if !params[:x].nil? && !params[:x].empty?
      q<<" AND name like :x"
      params[:x] = ("%"<<params[:x]<<"%")
    end
    ##年级
    if !params[:n].nil? && !params[:n].empty?
      q<<" AND grade like :n"
      params[:n] = ("%"<<params[:n]<<"%")
    end
    ##专业
    if !params[:z].nil? && !params[:z].empty?
      q<<" AND major like :z"
      params[:z] = ("%"<<params[:z]<<"%")
    end
    ##毕业开始时间
    if !params[:s].nil? && !params[:s].empty?
      begin
        params[:s] = params[:s].to_date
        q<<" AND graduationTime >= :s"
      rescue
      end
    end
    ##毕业结束时间
    if !params[:e].nil? && !params[:e].empty?
      begin
        params[:e] = params[:e].to_date + 1.month
        q<<" AND graduationTime <= :e"
      rescue
      end
    end
    ##生源地
    if !params[:d].nil? && !params[:d].empty?
      q<<" AND studentAddr like :d"
      params[:d] = ("%"<<params[:d]<<"%")
    end
    ##性别
    if !params[:b].nil? && !params[:b].empty?
      q<<" AND gender = :b"
    end
    ##手机
    if !params[:p].nil? && !params[:p].empty?
      q<<" AND phone like :p"
      params[:p] = ("%"<<params[:p]<<"%")
    end
    q
  end

  def get_college_by_university
    p = params[:content].sub(",", "")
    v =""
    Student.select("DISTINCT(college)").find_all_by_university(p.split(",")).each do |s|
      v << "<option value=\"#{s.college}\">#{s.college}</option>"
    end
    render :text => v
  end

  # GET /students/1
  # GET /students/1.json
  def show
    @student = Student.find(params[:id])
    #Student.all.each do |s|
    #  if s.name.length >3
    #    s.destroy
    #  end
    #end

    #generate test data
    #names = %w{赵 钱 孙 李 周 吴 郑 王 冯 陈 褚 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方 俞 任 袁 柳 酆 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卞 齐 康 伍 余 元 卜 顾 孟 平 黄 和 穆 萧 尹 姚 邵 湛 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 茅 庞 熊 纪 舒 屈 项 祝 董 梁 杜 阮 蓝 闵 席 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 刁 钟 徐 邱 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 昝 管 卢 莫 柯 房 裘 缪 干 解 应 宗 丁 宣 贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 陆 荣 翁 荀 羊 于 惠 甄 曲 家 封}
    #universitis = %w{东北财经大学 大连海事大学 大连理工大学}
    #colleges=%w{研究生院 MBA学院 法学院 管理科学与工程学院 国际商学院 公共管理学院 投资工程管理学院 经济学院 旅游与酒店管理学院 国际经济贸易学院 金融学院}
    #majors = %w{采矿工程  石油工程  矿物加工工程  勘查技术与工程  资源勘查工程  地质工程  矿物资源工程  煤及煤层气工程  冶金工程  金属材料工程  无机非金属材料工程  高分子材料与工程  材料科学与工程  复合材料与工程  焊接技术与工程  宝石及材料工艺学  粉体材料科学与工程  再生资源科学与技术  稀土工程  高分子材料加工工程  生物功能材料  机械设计制造及其自动化  材料成型及控制工程  工业设计  过程装备与控制工程  机械工程及自动化  车辆工程  机械电子工程  汽车服务工程  制造自动化与测控技术  制造工程  体育装备工程  测控技术与仪器  电子信息技术及仪器  热能与动力工程  核工程与核技术  工程物理  能源与环境系统工程  能源工程及自动化  能源动力系统及自动化  风能与动力工程  核技术  辐射防护与环境工程  电气工程及其自动化  自动化  电子信息工程  通信工程  计算机科学与技术}
    #groups = YAML.load(Mconfig.find_by_cname("groups").cvalue)
    #student_addrs = %w{陕西宝鸡 辽宁本溪 大连瓦房店}
    #500.times do |i|
    #  s= Student.new
    #  s.studentId = (1000000000+rand(8990000000)).to_s
    #  s.name = names[rand(names.length)]+names[rand(names.length)]
    #  s.university = universitis[rand(universitis.length)]
    #  s.college = colleges[rand(colleges.length)]
    #  s.grade = (Time.now.year + rand(5)).to_s<<%w{级 届}[rand(2)]<< %w{本科 硕士 博士}[rand(3)]
    #  s.major = majors[rand(majors.length)]
    #  s.sgroup = groups[r(groups.length)]
    #  s.gender = rand(2)
    #  s.studentAddr = student_addrs[rand(student_addrs.length)]
    #  s.graduationTime = Time.now - rand(500).days
    #  s.phone = s.studentId = (1000000000+rand(8990000000)).to_s << rand(10).to_s
    #  s.save
    #end
    #generate end
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @student }
    end
  end

  # GET /students/new
  # GET /students/new.json
  def new
    @student = Student.new
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @student }
    end
  end

  # GET /students/1/edit
  def edit
    @student = Student.find(params[:id])
  end

  # POST /students
  # POST /students.json
  def create
    @student = Student.new(params[:student])

    respond_to do |format|
      if @student.save
        format.html { redirect_to @student, notice: 'Student was successfully created.' }
        format.json { render json: @student, status: :created, location: @student }
      else
        format.html { render action: "new" }
        format.json { render json: @student.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /students/1
  # PUT /students/1.json
  def update
    @student = Student.find(params[:id])

    respond_to do |format|
      if @student.update_attributes(params[:student])
        format.html { redirect_to @student, notice: 'Student was successfully updated.' }
        format.json { head :ok }
      else
        format.html { render action: "edit" }
        format.json { render json: @student.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /students/1
  # DELETE /students/1.json
  def destroy
    @student = Student.find(params[:id])
    @student.destroy
    Attendance.find_all_by_student_id(params[:id]).each do |a|
      a.destroy
    end
    Score.find_all_by_student_id(params[:id]).each do |s|
      s.destroy
    end
    respond_to do |format|
      format.html { redirect_to students_url }
      format.json { head :ok }
    end
  end

  def view_attendances
    @student = Student.find(params[:id])
    @attendances = Attendance.find_all_by_student_id(params[:id], :include=>[:tclass])
  end

  def view_scores
    @student = Student.find(params[:id])
    @scores = Score.find_all_by_student_id(params[:id], :include=>[:exam])
  end
end
